// 给定一个数组nums，要求将所有0移动到末尾，并保持所有的非0数字的相对顺序

// 思路，用快慢指针
// slow，该索引前的元素都不是0,fast，该索引指向当前处理元素
// 每次fast移动到非0数，slow和fast指向的元素交换，同时slow右移

function moveZeroes(nums) {
    let slow = 0
    let fast = 0
    while (fast < nums.length) {
        if (nums[fast] !== 0) {
            [nums[slow], nums[fast]] = [nums[fast], nums[slow]];
            slow++
        }
        fast++
    }
    return nums
}

// 时间复杂度为On
// 空间复杂度为O1

let nums = [0, 1, 0, 3, 12]
moveZeroes(nums)
console.log(nums);